iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
Software Development

測試工程師的上線時間:從分析到實戰的刻意練習系列 第 13

Day 13:使用 pytest 撰寫對 reqres.in 的一個 API 測試案例

  • 分享至 

  • xImage
  •  

前言

今天我們來用 pytest 練習一下 API 測試,並選擇 reqres.in 這個模擬 API 平台。這個平台是專門為測試前端或 API 準備的,提供了很多常見的 API 介面,蠻適合拿來做測試演練。

題目:使用 pytest 撰寫對 reqres.in 的一個 API 測試案例。

挑戰目標

選擇 reqres.in 中的其中一個 API,像是用 GET 請求 /api/users?page=1 來獲取使用者列表。使用 pytest 來撰寫測試案例,檢查 API 的狀態碼、伺服器回應資料是否符合預期。

還可以進一步檢查伺服器回應中的資料,像是使用者數量,或者檢查某個特定使用者的資料是不是正確的。目標是在 30 分鐘內搞定這個練習,藉此熟悉一下 pytest 怎麼用來進行 API 測試。

你可以在 30 分鐘內完成這個練習,藉此熟悉 pytest 如何進行 API 測試。

以下是我的練習:

如果有在用 GitHub Copilot 的話,可以考慮先關掉,看看自己需要多久才能完成第一個測試案例。寫完第一版後,再讓 ChatGPT 或 GitHub Copilot 幫你 code review,這樣可以比較一下差異,思考一下為什麼寫第一版的時候沒想到那些優化。

import requests
from dataclasses import dataclass


@dataclass
class User:
    id: int
    email: str
    first_name: str
    last_name: str
    avatar: str


def test_users():
    response = requests.get("https://reqres.in/api/users?page=1")
    assert response.status_code == 200, f"Request failed with status code {response.status_code}"

    data = response.json()
    total = data["total"]
    total_pages = data["total_pages"]

    all_users = [User(**user) for user in data["data"]]

    for i in range(2, total_pages + 1):
        response = requests.get(f"https://reqres.in/api/users?page={i}")
        assert response.status_code == 200, f"Request failed with status code {response.status_code}"

        users = [User(**user) for user in response.json()["data"]]
        all_users.extend(users)

    assert len(all_users) == total

結論

這個練習其實很適合檢驗自己對 API 測試到底有多熟,還有面對 API 測試時,能不能快速反應出該驗證什麼。說真的,這種練習超適合用來學習新的 testing framework,因為它不僅是讓你測試你會不會寫測試案例,也是在看你能不能靈活運用這些工具來搞定測試。

透過這個方式,你可以更快抓住 API 測試的精髓,還有熟悉測試框架的操作。總之,這個練習就是一個檢測「即戰力」的好方法,不但能加速你學習新工具,還能讓你在實戰中更得心應手。


上一篇
Day 12:測試工程師的真正價值在哪裡?
下一篇
Day 14:設計自助洗衣機的計費系統的測試案例
系列文
測試工程師的上線時間:從分析到實戰的刻意練習26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言